
<%
	//Info jsp
	/** 
	 *  pagina che restituisce i dati per formare le tabelle dei risultati voli
	 * @author Alessandro  Nasso
	 * @version  1.0
	 */
%>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1" 
	import="beans.*"
	import="beans.Parallel" 
	import="java.text.SimpleDateFormat" 
	import="java.util.*"
	import="java.util.Calendar"
	%>


<%
	//------------------------------------------------------------------
%>
<jsp:useBean id="ris" scope="session" class="beans.StorageBean" />
<jsp:useBean id="verifica" scope="page" class="beans.VerificaCampi" />
<jsp:useBean id="dbConn" scope="page" class="beans.Query1" />

<%
	//------------------------------------------------------------------
%>

<%
	// data=20-10-2011 & aa=MXP & ad=LIN & ca=Milano & cd=Milano & na=Italia & nd=Italia &_=1315262204429

	String data = null, 
		   aa = null,
		   ad = null, 
		   ca = null, 
		   cd = null, 
		   na = null, 
		   nd = null, 
		   scalo = null;

	data = request.getParameter("data");
	aa = request.getParameter("aa");
	ad = request.getParameter("ad");
	ca = request.getParameter("ca");
	cd = request.getParameter("cd");
	na = request.getParameter("na");
	nd = request.getParameter("nd");
	scalo = request.getParameter("scalo");

	//------------------------------------- creazione query ----------------------------------------------*/

	out.print("{ \"aaData\": [");

	if ((verifica.verificaData(data) && verifica
			.verificaGenerica(scalo))
			&& ((ad == null) || (ad.compareTo("null") == 0)
					|| (ad.compareTo("") == 0) || (verifica
						.verificaAero(ad)))
			&& ((aa == null) || (aa.compareTo("null") == 0)
					|| (aa.compareTo("") == 0) || (verifica
						.verificaAero(aa)))
			&& ((cd == null) || (cd.compareTo("null") == 0)
					|| (cd.compareTo("") == 0) || (verifica
						.verificaCitta(cd)))
			&& ((ca == null) || (ca.compareTo("null") == 0)
					|| (ca.compareTo("") == 0) || (verifica
						.verificaCitta(ca)))
			&& ((nd == null) || (nd.compareTo("null") == 0)
					|| (nd.compareTo("") == 0) || (verifica
						.verificaNazione(nd)))
			&& ((na == null) || (na.compareTo("null") == 0)
					|| (na.compareTo("") == 0) || (verifica
						.verificaNazione(na)))) {

		String query = "", from = "";
		boolean good_query = true;

		if (scalo.compareTo("si") == 0) {

			from = "SELECT "
					+ "V.id1, "
					+ "V.compagnia1, "
					+ "V.partenza1, "
					+ "A.Nome AS aeroP, "
					+ "C.Nome AS cittaP, "
					+ "V.destinazione2, "
					+ "A1.Nome AS aeroA, "
					+ "C1.Nome AS cittaA, "
					+ "DATE_FORMAT(V.oraP1,'%H:%i:%s') AS ora_partenza, "
					+ "DATE_FORMAT(V.oraA2,'%H:%i:%s') AS ora_arrivo, "
					+ "V.durata1+V.durata2+FLOOR((unix_timestamp(V.oraP2)-unix_timestamp(V.oraA1))/60) AS durata, "
					+ "LEAST(V.posti1, V.posti2) AS posti, "
					+ "V.prezzo_tot as prezzo, "
					+ "V.posti1 AS posti1, "
					+ "V.id2 AS id2, "
					+ "V.compagnia2 AS compagnia2, "
					+ "V.posti2 AS posti2 "
					+ "FROM view_1scalo V, citta C, citta C1, aereoporti A, aereoporti A1 ";

			// aeroporto partenza
			if ((ad != null) && (ad.compareTo("null") != 0)
					&& (ad.compareTo("") != 0)) {
				query += " WHERE V.partenza1='"
						+ ad
						+ "' AND DATE_FORMAT(V.oraP1,'%d-%m-%Y')='"
						+ data
						+ "' AND A.CodCitta=C.idCitta AND A.idAereoporto=V.partenza1 ";
			} else // città partenza
			if ((cd != null) && (cd.compareTo("null") != 0)
					&& (cd.compareTo("") != 0)) {
				query += " WHERE DATE_FORMAT(V.oraP1,'%d-%m-%Y')='"
						+ data
						+ "' AND lower(C.nome)="
						+ "lower('"
						+ cd.replace("'", "''")
						+ "')"
						+ " AND A.CodCitta=C.idCitta AND A.idAereoporto=V.partenza1";
			} else // nazione partenza
			if ((nd != null) && (nd.compareTo("null") != 0)
					&& (nd.compareTo("") != 0)) {
				from += ", nazioni N ";

				query += " WHERE DATE_FORMAT(V.oraP1,'%d-%m-%Y')='"
						+ data
						+ "'  AND lower(N.Nome)="
						+ "lower('"
						+ nd.replace("'", "''")
						+ "')"
						+ "  AND C.codNazione=N.idNazioni AND A.CodCitta=C.idCitta AND A.idAereoporto=V.partenza1";
			} else
				// se sono qui mancava qualche dato per la partenza
				good_query = false;

			// verifico di avere un dato per la partenza e verifico quello per la destinazione
			if (good_query)
				// aeroporto destinazione
				if ((aa != null) && (aa.compareTo("null") != 0)
						&& (aa.compareTo("") != 0)) {
					query += " AND lower(V.destinazione2)='"
							+ aa
							+ "' AND A1.CodCitta=C1.idCitta AND A1.idAereoporto=V.destinazione2";
				} else // città destinazione
				if ((ca != null) && (ca.compareTo("null") != 0)
						&& (ca.compareTo("") != 0)) {
					query += " AND lower(C1.nome)="
							+ "lower('"
							+ ca.replace("'", "''")
							+ "')"
							+ " AND A1.CodCitta=C1.idCitta AND A1.idAereoporto=V.destinazione2";
				} else // nazione destinazione
				if ((na != null) && (na.compareTo("null") != 0)
						&& (na.compareTo("") != 0)) {
					from += ", nazioni N1";
					query += " AND lower(N1.Nome)="
							+ "lower('"
							+ na.replace("'", "''")
							+ "')"
							+ " AND C1.codNazione=N1.idNazioni AND A1.CodCitta=C1.idCitta AND A1.idAereoporto=V.destinazione2";
				} else
					// se sono qui mancava qualche dato per la destinazione
					good_query = false;
		} else { // senza gli scali

			from = "SELECT V.id, V.compagnia, V.partenza, A.Nome AS aeroP, C.Nome AS cittaP, V.destinazione, A1.Nome AS aeroA, C1.Nome AS cittaA, DATE_FORMAT(V.oraP,'%H:%i:%s') AS ora_partenza, DATE_FORMAT(V.oraA,'%H:%i:%s') AS ora_arrivo, V.durata, V.posti, V.prezzo FROM voli V, citta C, citta C1, aereoporti A, aereoporti A1";

			//Aeroporto partenza
			if ((ad != null) && (ad.compareTo("null") != 0)
					&& (ad.compareTo("") != 0)) {
				query += " WHERE DATE_FORMAT(V.oraP,'%d-%m-%Y')='"
						+ data
						+ "' AND V.partenza='"
						+ ad
						+ "' AND A.CodCitta=C.idCitta AND A.idAereoporto=V.partenza";
			}
			//Citta partenza
			else if ((cd != null) && (cd.compareTo("null") != 0)
					&& (cd.compareTo("") != 0)) {
				query += " WHERE DATE_FORMAT(V.oraP,'%d-%m-%Y')='"
						+ data
						+ "' AND C.nome="
						+ "lower('"
						+ cd.replace("'", "''")
						+ "')"
						+ " AND A.CodCitta=C.idCitta AND A.idAereoporto=V.partenza";
			}
			//Nazione partenza
			else if ((nd != null) && (nd.compareTo("null") != 0)
					&& (nd.compareTo("") != 0)) {
				from += ", nazioni N ";
				query += " WHERE DATE_FORMAT(V.oraP,'%d-%m-%Y')='"
						+ data
						+ "' AND N.Nome="
						+ "lower('"
						+ nd.replace("'", "''")
						+ "')"
						+ " AND C.codNazione=N.idNazioni AND A.CodCitta=C.idCitta AND A.idAereoporto=V.partenza";
			} else
				good_query = false;

			//Aeroporto arrivo
			if ((aa != null) && (aa.compareTo("null") != 0)
					&& (aa.compareTo("") != 0)) {
				query += " AND V.destinazione='"
						+ aa
						+ "' AND A1.CodCitta=C1.idCitta AND A1.idAereoporto=V.destinazione";
			}
			//Citta arrivo
			else if ((ca != null) && (ca.compareTo("null") != 0)
					&& (ca.compareTo("") != 0)) {
				query += " AND C1.nome="
						+ "lower('"
						+ ca.replace("'", "''")
						+ "')"
						+ " AND A1.CodCitta=C1.idCitta AND A1.idAereoporto=V.destinazione";
			}
			//Nazione arrivo
			else if ((na != null) && (na.compareTo("null") != 0)
					&& (na.compareTo("") != 0)) {
				from += ", nazioni N1";
				query += " AND N1.Nome="
						+ "lower('"
						+ na.replace("'", "''")
						+ "')"
						+ " AND C1.codNazione=N1.idNazioni AND A1.CodCitta=C1.idCitta AND A1.idAereoporto=V.destinazione";
			} else
				good_query = false;
		}

		//------------------------------------------------------------------------------------------------------------------------------------------------------

		// verifico che la query sia valida
		if (good_query) {

			// costruisco la query
			query = from + query + " ;";

			//out.print(query);

			request.setAttribute("prelievo", "true");
			request.setAttribute("query", query);
			ris.setRequest(request);
%>
<jsp:include page="/gestore_query.jsp" />

<%
	
	String[][] voli = dbConn.getDati(query);
			// chiamo la funzione e recupero i risultati
			if (voli != null) {
				// recupero i numeri delle colonne

				//-------------------------------------------
				Integer colonna_id = 0, 
						colonna_compagnia = 1, 
						colonna_partenza = 2, 
						colonna_aeroP = 3, 
						colonna_cittaP = 4, 
						colonna_destinazione = 5, 
						colonna_aeroA = 6, 
						colonna_cittaA = 7, 
						colonna_oraPartenza = 8, 
						colonna_oraArrivo = 9, 
						colonna_durata = 10, 
						colonna_posti = 11, 
						colonna_prezzo = 12, 
						colonna_posti1 = 13, 
						colonna_id2 = 14, 
						colonna_compagnia2 = 15, 
						colonna_posti2 = 16;

				// se con lo scalo
				if (scalo.compareTo("si") == 0) {
					// stampo risultati
					for (int j = 1; j < voli.length; j++) {
						if (j != 1) {
							out.print(", ");
						}

						out.print(" [\"" + voli[j][colonna_compagnia]
								+ voli[j][colonna_id] + " "
								+ voli[j][colonna_compagnia2]
								+ voli[j][colonna_id2] + "\", \""
								+ voli[j][colonna_partenza] + ": "
								+ voli[j][colonna_aeroP] + ", "
								+ voli[j][colonna_cittaP] + "\", \""
								+ voli[j][colonna_destinazione] + ": "
								+ voli[j][colonna_aeroA] + ", "
								+ voli[j][colonna_cittaA] + "\", \""
								+ voli[j][colonna_oraPartenza]
								+ "\", \"" + voli[j][colonna_oraArrivo]
								+ "\", \"" + voli[j][colonna_durata]
								+ "\", \"" + voli[j][colonna_posti]
								+ "\", \"1\", \""
								+ voli[j][colonna_prezzo] + "\" ]");
					}

				} else {

					// stampo risultati senza scalo
					for (int j = 1; j < voli.length; j++) {
						if (j != 1) {
							out.print(",");
						}

						out.print(" [\"" + voli[j][colonna_compagnia]
								+ voli[j][colonna_id] + "\", \""
								+ voli[j][colonna_partenza] + ": "
								+ voli[j][colonna_aeroP] + ", "
								+ voli[j][colonna_cittaP] + "\", \""
								+ voli[j][colonna_destinazione] + ": "
								+ voli[j][colonna_aeroA] + ", "
								+ voli[j][colonna_cittaA] + "\", \""
								+ voli[j][colonna_oraPartenza]
								+ "\", \"" + voli[j][colonna_oraArrivo]
								+ "\", \"" + voli[j][colonna_durata]
								+ "\", \"" + voli[j][colonna_posti]
								+ "\", \"0\", \""
								+ voli[j][colonna_prezzo] + "\" ]");
					}

				}

				//------------------------------------------------------------------- fine stampa a video dei risultati

			}// fine se voli non nulli
			else {
				//out.print("non ci sono voli");
			}

		}// fine controllo sia una buona query (contenga i dati necessari)
		else {
			//out.print("non sono stati inseriti tutti i campi");
		}

	} // fine controllo sui parametri
	else {
		//out.print("qualche parametro errato");
	}

	out.print(" ] }");
%>

